package edu.zut.static_test;

/**
 * static: 静态  能修饰属性、变量、常量、方法、内部类、代码块....
 * static修饰的元素，属于类所有的 （类可以直接调用），不依赖对象,同时又被基于当前类的所有对象共享
 * 非static修饰的元素，属于对象所有（通过对象调用）
 *
 */
public class Demo {
    //静态属性   此时属于类所有
    static int num;
    //非静态属性
    String msg;

    //静态方法   属于类所有
    public static void test(){
        System.out.println("test.......num：" + num);
//        System.out.println("msg = " + msg);
//        test2();
    }
    //非静态方法   属于对象
    public void test2(){
        test();
    }


    //静态常量   属于类所有
    static final String SCHOOL = "中原工学院";
    //静态代码块  属于类所有   自动执行的，当执行当前类的时候，首先执行静态代码块，只执行一次
    static {
        System.out.println("静态代码块......");
    }
    //构造代码块 属于对象所有  每次创建对象时会默认执行   执行在构造方法之前执行的
    {
        System.out.println("构造代码块.....");
    }

    public static void main(String[] args) {
        Demo.num = 100;
        Demo.test();
        System.out.println(Demo.SCHOOL);
        Demo demo = new Demo();
        System.out.println("demo.num = " + demo.num);
        Demo.num = 200;
        System.out.println("demo.num = " + demo.num);
        Demo demo2 = new Demo();
//        demo2.test();
        System.out.println("demo2.num = " + demo2.num);  //200
        demo2.num = 300;
        System.out.println("demo.num = " + demo.num);  //300
        System.out.println("demo2.num = " + demo2.num); //300
    }

}
